import request from '@/utils/request'

/**
 * 头像相关API
 */

// 上传头像文件（仅上传不更新用户信息）
export function uploadAvatarFile(file) {
  const formData = new FormData()
  formData.append('file', file)
  
  return request({
    url: '/upload/avatar',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

// 上传并更新用户头像
export function updateUserAvatar(file) {
  const formData = new FormData()
  formData.append('file', file)
  
  return request({
    url: '/user/avatar/upload',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

// 获取当前用户头像信息
export function getCurrentUserAvatar() {
  return request({
    url: '/user/avatar/current',
    method: 'get'
  })
}

// 获取指定用户头像信息
export function getUserAvatar(userId) {
  return request({
    url: `/user/avatar/user/${userId}`,
    method: 'get'
  })
}

// 重置用户头像为默认头像
export function resetUserAvatar() {
  return request({
    url: '/user/avatar/reset',
    method: 'post'
  })
}

// 获取头像文件信息
export function getAvatarFileInfo(year, month, day, filename) {
  return request({
    url: `/files/info/avatar/${year}/${month}/${day}/${filename}`,
    method: 'get'
  })
}

// 构建头像URL
export function buildAvatarUrl(avatarPath) {
  if (!avatarPath) return '/images/default-avatar.png'
  
  // 如果已经是完整URL，直接返回
  if (avatarPath.startsWith('http')) {
    return avatarPath
  }
  
  // 如果是相对路径，补充基础URL
  const baseURL = process.env.VUE_APP_BASE_API || 'http://localhost:8080/api'
  return avatarPath.startsWith('/') ? baseURL + avatarPath : baseURL + '/' + avatarPath
}

// 验证头像文件
export function validateAvatarFile(file) {
  const errors = []
  
  // 检查文件类型
  const validTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/bmp', 'image/webp']
  if (!validTypes.includes(file.type)) {
    errors.push('请选择有效的图片格式（jpg, jpeg, png, gif, bmp, webp）')
  }
  
  // 检查文件大小 (5MB)
  const maxSize = 5 * 1024 * 1024
  if (file.size > maxSize) {
    errors.push('头像文件大小不能超过5MB')
  }
  
  // 检查文件名
  if (!file.name) {
    errors.push('文件名不能为空')
  }
  
  return {
    valid: errors.length === 0,
    errors
  }
}

// 压缩图片（可选功能）
export function compressImage(file, quality = 0.8, maxWidth = 800) {
  return new Promise((resolve) => {
    const canvas = document.createElement('canvas')
    const ctx = canvas.getContext('2d')
    const img = new Image()
    
    img.onload = () => {
      // 计算压缩后的尺寸
      let { width, height } = img
      if (width > maxWidth) {
        height = (height * maxWidth) / width
        width = maxWidth
      }
      
      canvas.width = width
      canvas.height = height
      
      // 绘制图片
      ctx.drawImage(img, 0, 0, width, height)
      
      // 转换为blob
      canvas.toBlob((blob) => {
        resolve(blob)
      }, file.type, quality)
    }
    
    img.src = URL.createObjectURL(file)
  })
}

// 创建头像预览URL
export function createPreviewUrl(file) {
  return URL.createObjectURL(file)
}

// 释放预览URL
export function revokePreviewUrl(url) {
  URL.revokeObjectURL(url)
} 